package com.ysh.springmvc.controller;

import com.ysh.springmvc.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.List;

/**
 * 袁胜虎 on 2022/8/29 21:36
 */
@Controller
@RequestMapping("/users")
public class UserController {
    /**
     * 获取?username=zhangsan&password=dasdasddas
     * @param request
     */
    @RequestMapping("/test1")
    public void test1(HttpServletRequest request){
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.err.println(username+"------>>>>"+password);
    }
    /**
     * 获取?username=zhangsan&password=dasdasddas 方式2
     * 规则: 请求中参数的名字和类型要和方法的形参的名字和类型保持一致, 顺序无所谓
     */
    @RequestMapping("/test2")
    public void test2(String username,String password){
        System.err.println(username+"====>>>>"+password);
    }
    /**
     * 获取?username=zhangsan&password=dasdasddas 方式3
     * 假设传递的参数名和我们的形参的名字不一样,那我们得建立映射关系
     * 我们可以在形参前面添加一个注解,来指定对应的请求参数的名字
     * @RequestParam(name = "username") String uname 意思就是请求参数中的username保存到uname这个形参上
     */
    @RequestMapping("/test3")
    public void test3(@RequestParam(name = "username") String uname,@RequestParam(name = "password") String pwd){
        System.err.println(uname+"++++>>>>"+pwd);
    }
    /**
     * 获取?username=zhangsan&password=dasdasddas&age=18 方式4,age如果不传递就是默认值18
     * 假设传递的参数名和我们的形参的名字不一样,那我们得建立映射关系
     * 我们可以在形参前面添加一个注解,来指定对应的请求参数的名字
     * @RequestParam(name = "username") String uname 意思就是请求参数中的username保存到uname这个形参上
     * defaultValue可以给某个参数设置默认值,在不传递的情况下就使用默认值
     * required = false 当前参数可以不传递
     */
    @RequestMapping("/test4")
    public void test4(@RequestParam(name = "username") String uname,@RequestParam(name = "password",required = false) String pwd,@RequestParam(defaultValue = "18") int age){
        System.err.println(uname+"++++>>>>"+pwd+"====>>年龄:"+age);
    }
    /**
     * 获取?username=zhangsan&password=dasdasddas&age=18&address=beijing 方式5
     * 规则: 请求的参数名和对象中的属性名保持一致
     * @param user
     */
    @RequestMapping("/test5")
    public void test5(User user){
        System.err.println(user);
    }
    /**
     * 接收hobby=chouyan&hobby=hejiu&hobby=tangtou
     * @param hobby
     */
    @RequestMapping("/test6")
    public void test6(String[] hobby){
        System.err.println(Arrays.toString(hobby));
    }

    public class UserList{
        private List<User> users;
    }
    @RequestMapping("/test7")
    public void test7(UserList userList){
    }
    //根据id传递查询数据  user/1   user/2
    /**
     * 我们有一个参数是地址中
     * @param userId 我们期望地址占位符中的数据当做当前的参数
     * @PathVariable 将请求中占位符对应的数据设置给当前的参数,占位符中的名字必须和形参的名字一致
     */
    @RequestMapping("/test8/{userId}")
    public void test8(@PathVariable String userId){
        System.err.println(userId);
    }
    /**
     * PathVariable可以写多个,如果占位符的名字和形参的名字不一样,则通过给注解添加值来指定映射,注解的值就是占位符的名字
     * @param
     */
    @RequestMapping("/test9/{userId}/{wqe}/{qweads}")
    public void test9(@PathVariable("userId") String user,@PathVariable("wqe") String w,@PathVariable("qweads") String q){
        System.err.println(user+"=="+w+"=="+q);

    }
}
